Computer programming languages support various data types that can be assigned to variables or expressions. Data types include strings, floating point numbers, integers and so on. Assigning the wrong data type to a variable or expression can cause a program to malfunction or to stop running. Type checking is one way to ensure that the wrong data type is not assigned to a variable or expression. Type checking can be performed at compile time (static type checking) or at runtime (dynamic type checking). Static type checking is able to verify that the type checked conditions hold for all possible executions of the program. Dynamic type checking is able to verify that a particular execution of a program is free of type errors. Therefore, dynamic type checking is typically performed each time the program is run.